/**
 * A=[]
 * B=[]
 * C=[A连接B]
 * 现在让c变成
 * C=[B连接A]
 * 
 * 如果用两个指针i,j交换两个数组的元素，会导致中间有空位或者中间重叠
 * 如A=[5] B=[10]  则交换后[10,5]个，导致五个重叠了
 * 
 * 所以先将C整体反转，
 * 然后各自反转
 */


#include<stdbool.h>
#include<stdio.h>
typedef int ElementType;

#define MAX_LENGTH 100
typedef struct{
    ElementType data[MAX_LENGTH];
    int size;
} SqList;

/**
 * @param a 待反转的顺序表
 * @param left 左边界,包括
 * @param right 右边界，包括
 */
void reverse(SqList a,int left,int right){
    if(left>right||right>=a.size){
        return ;
    }
    int mid=(left+right)/2;
    for(int i=0;i<=mid-left;i++){
        ElementType temp=a.data[left+i];
        a.data[left+i]=a.data[right-i];
        a.data[right-i]=temp;
    }
}

void exchange(SqList a,int m,int n){
    reverse(a,0,m+n-1);//反转整个数组[A,B] - > [B^-1,A^-1]
    reverse(a,0,n-1);//反转B
    reverse(a,n,m+n-1);//反转A
}